/*
 * Bagulho.java e uma classe para definir os "objetos" que serao usados pelo jogo.
 * Uma classe base para ser pai de outras classes.
 */
package booebill;

import javax.swing.*;
import java.awt.*;

/**
 *
 * @author druciaki
 * email druciaki@gmail.com
 * @author hartmann
 * email daniel.hnn@gmail.com
 */
public class Bagulho extends Thread
{
    protected int iPosX, iPosY, iSentidoX, iSentidoY, iLargura, iAltura,iPontuacao;
    protected double dVelocidade;
    protected String sDescricao;
    protected Image imgImagem;
    protected boolean bExiste = false;
    /*
     * construtor do bagulho (sem parametros)
     */
    public Bagulho()
    {
        super("Bagulho-indefinido");
        bExiste=true;
        iPosX=1;
        iPosY=1;
        sDescricao = "Objeto Sem Descricao";
        System.out.println("construiu bagulho sem param");
        iPontuacao=0;
    }
    
    /*
     * construtor do bagulho
     * @param   iPosX       Posi��o X do objeto
     * @param   iPosY       Posi��o Y do objeto
     * @param   iVelocidade Velocidade que o objeto se movimenta
     * @param   sDescricao  String contendo a descri��o do objeto
     */
    public Bagulho(int iPosX,int iPosY,double dVelocidade, String sDescricao)
    {
        super(sDescricao+(iPosX-50));
        bExiste=true;
        this.sDescricao = sDescricao;
        if(!setImagem(sDescricao))
            this.imgImagem = new ImageIcon(getClass().getResource(sDescricao)).getImage();
        iLargura = this.imgImagem.getWidth(null);
        iAltura = this.imgImagem.getHeight(null);
        this.iPosX = iPosX;
        this.iPosY = iPosY-(iAltura/2);
        this.dVelocidade = dVelocidade;
        System.out.println("construiu bagulho com param");
        iPontuacao=0;
        this.start();
    }
    
    
    public int getX()
    { return this.iPosX; }
    public int getY()
    { return this.iPosY; }
    
    public void setX(int iPosX)
    { this.iPosX = iPosX; }
    public void setY(int iPosY)
    { this.iPosY = iPosY; }
    
    /* 
     * moverY                   move o bagulho no eixo Y
     * @param   iSentido        o quanto e para onde se mover
     * @param   iAltura         altura da tela
     */
    public void moverY(double iSentido, int iAlturaTela)
    {
        int iAux = ((int)(iPosY+iSentido));
        if((iAux>=20) && (iAux<=iAlturaTela-iAltura))
        {
            iPosY=((int)(iPosY+iSentido));
            //System.out.println(iPosY); //DEBUG
        }
    }
    
    /*
     * moverX       move o Bagulho no eixo X, caso haja iVelocidade diferente de 0
     */
    public void moverX()
    {
        if(dVelocidade!=0)
        {
            iPosX = ((int)(iPosX+dVelocidade));
        }
    }
    
    /*
     * @param   iSentidoX   Recebe o novo valor do sentido X (s� pode ser 1 ou -1)
     */
    public void setSentidoX(int iSentidoX)
    {
        if((iSentidoX==1)||(iSentidoX==-1))
        {
            this.iSentidoX=iSentidoX;
        }
        else
        {System.out.println("Erro ao tentar definir sentido");}
    }
    
    /*
     * @param   iSentidoY   Recebe o novo valor do sentido Y (s� pode ser 1 ou -1)
     */
    public void setSentidoY(int iSentidoY)
    {
        if((iSentidoY==1)||(iSentidoY==-1))
        {
            this.iSentidoY=iSentidoY;
        }
        else
        {System.out.println("Erro ao tentar definir sentido");}
    }
    
    /*
     * @return  retorna o sentido X -1 ou 1
     */
    public int getSentidoX()
    {return(iSentidoX);}
    /*
     * @return  retorna o sentido Y -1 ou 1
     */
    public int getSentidoY()
    {return(iSentidoY);}
    
    
    public boolean setImagem(String sDescricao)
    {
        boolean bAux=false;
        if(sDescricao=="boo")
        {
            this.imgImagem = new ImageIcon(getClass().getResource("/boo.png")).getImage();
            //System.out.println("imagem do bagulho setada"); //DEBUG
            bAux=true;
        }
        else
        {
            if(sDescricao=="bill")
            {
                this.imgImagem = new ImageIcon(getClass().getResource("/bill.png")).getImage();
                //System.out.println("imagem do bagulho setada"); //DEBUG
                bAux=true;
            }
        }
        return bAux;
    }
    
    public Image getImagem()
    {
        return this.imgImagem;
    }
    
    public int getAltura()
    {
        return (iAltura);
    }
    
    public String getDescricao()
    {
        return this.sDescricao;
    }
    
    public boolean getExiste()
    {
        return this.bExiste;
    }
    
    public void mata()
    {
        bExiste = false;
    }
    
    public int RetornaPontuacao()
    {
        return(iPontuacao);
    }
    public void AdicionaPontuacao(int iPontos)
    {
        iPontuacao=iPontuacao+iPontos;
    }
}
